nfl_analytics_theme <- function(..., base_size = 12) {
theme(
text = element_text(family = "Roboto",
size = base_size,
color = "black"),
axis.ticks = element_blank(),
axis.title = element_text(face = "bold"),
axis.text = element_text(face = "bold"),
plot.title.position = "plot",
plot.title = element_markdown(size = 16,
vjust = .02,
hjust = 0.5),
plot.subtitle = element_markdown(hjust = 0.5),
plot.caption = element_markdown(size = 8),
panel.grid.minor = element_blank(),
panel.grid.major = element_line(color = "#d0d0d0"),
panel.background = element_rect(fill = "#f7f7f7"),
plot.background = element_rect(fill = "#f7f7f7"),
panel.border = element_blank(),
legend.background = element_rect(color = "#F7F7F7"),
legend.key = element_rect(color = "#F7F7F7"),
legend.title = element_text(face = "bold"),
legend.title.align = 0.5,
strip.text = element_text(face = "bold"))
}
teams <- nflreadr::load_teams()
This looks like a good article on EPA.
Offensive EPA
play_by_play_2024
── nflverse play by play data ──────────────────────────────────────────────────────────────────────────────────────────
ℹ Data updated: 2024-10-14 05:20:52 EDT
What’s the combined record of teams in each quadrant?

play_by_play_2024 %>%
filter(defteam == 'PIT') %>%
select(posteam, defteam, home_team, contains('epa'), everything()) %>%
arrange(epa)
── nflverse play by play data ──────────────────────────────────────────────────────────────────────────────────────────
ℹ Data updated: 2024-10-14 05:20:52 EDT
LS0tCnRpdGxlOiAiTkZMIEFuYWx5dGljczogYSByZXZpZXcgb2YgRXhwZWN0ZWQgUG9pbnRzIEFkZGVkIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBsaWJyYXJpZXMsIGluY2x1ZGU9VFJVRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobmZsdmVyc2UpCmxpYnJhcnkoZ3QpCmxpYnJhcnkoZ2d0ZXh0KQpsaWJyYXJ5KGdncmVwZWwpCmxpYnJhcnkocGF0Y2h3b3JrKQpsaWJyYXJ5KGdnaW1hZ2UpCmBgYAoKYGBge3IgbmZsX2FuYWx5dGljc190aGVtZSwgaW5jbHVkZT1UUlVFfQpuZmxfYW5hbHl0aWNzX3RoZW1lIDwtIGZ1bmN0aW9uKC4uLiwgYmFzZV9zaXplID0gMTIpIHsKICAKICB0aGVtZSgKICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlJvYm90byIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBiYXNlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKSwKICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKSwKICAgIHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIsCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF9tYXJrZG93bihzaXplID0gMTYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IC4wMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhqdXN0ID0gMC41KSwKICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X21hcmtkb3duKGhqdXN0ID0gMC41KSwKICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfbWFya2Rvd24oc2l6ZSA9IDgpLAogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQubWFqb3IgPSAgZWxlbWVudF9saW5lKGNvbG9yID0gIiNkMGQwZDAiKSwKICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjZjdmN2Y3IiksCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjZjdmN2Y3IiksCiAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICIjRjdGN0Y3IiksCiAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9yZWN0KGNvbG9yID0gIiNGN0Y3RjciKSwKICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKSwKICAgIGxlZ2VuZC50aXRsZS5hbGlnbiA9IDAuNSwKICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIikpCn0KYGBgCgoKYGBge3IgdGVhbXMsIGluY2x1ZGU9VFJVRX0KdGVhbXMgPC0gbmZscmVhZHI6OmxvYWRfdGVhbXMoKQpgYGAKCgoKVGhpcyBsb29rcyBsaWtlIGEgZ29vZCBhcnRpY2xlIG9uIFtFUEFdKGh0dHBzOi8vYmVzdGJhbGxzdGF0cy5jb20vZXhwZWN0ZWQtcG9pbnRzLWFkZGVkLWEtZnVsbC1leHBsYW5hdGlvbi8jOn46dGV4dD1FeHBlY3RlZCUyMFBvaW50cyUyMEFkZGVkJTIwKEVQQSklMjBpcyxldmFsdWF0ZSUyMHRlYW0lMjBhbmQlMjBwbGF5ZXIlMjBwZXJmb3JtYW5jZS4pLgoKCmBgYHtyIHBsYXlfYnlfcGxheV8yMDI0LCBpbmNsdWRlPVRSVUV9CnBsYXlfYnlfcGxheV8yMDI0IDwtIGxvYWRfcGJwKHNlYXNvbnM9bW9zdF9yZWNlbnRfc2Vhc29uKCkpCmBgYAoKIyBPZmZlbnNpdmUgRVBBIAoKYGBge3J9Cih0ZWFtX29mZmVuc2l2ZV9lcGEgPC0gcGxheV9ieV9wbGF5XzIwMjQgJT4lIAogIGdyb3VwX2J5KHBvc3RlYW0pICU+JSAKICBmaWx0ZXIoIWlzLm5hKHBvc3RlYW0pKSAlPiUgCiAgc3VtbWFyaXNlKGF2Z19vZmZlbnNpdmVfZXBhID0gbWVhbihlcGEsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIC5ncm91cHMgPSAnZHJvcCcpICU+JSAKICByZW5hbWUodGVhbSA9IHBvc3RlYW0pKQpgYGAKCmBgYHtyfQoodGVhbV9kZWZlbnNpdmVfZXBhIDwtIHBsYXlfYnlfcGxheV8yMDI0ICU+JSAKICBncm91cF9ieShkZWZ0ZWFtKSAlPiUgCiAgZmlsdGVyKCFpcy5uYShwb3N0ZWFtKSkgJT4lIAogIHN1bW1hcmlzZShhdmdfZGVmZW5zaXZlX2VwYSA9IG1lYW4oZXBhLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICAuZ3JvdXBzID0gJ2Ryb3AnKSAlPiUgCiAgcmVuYW1lKHRlYW0gPSBkZWZ0ZWFtKSkKYGBgCgpgYGB7cn0KKGRmX3RlYW1fZXBhIDwtIHRlYW1fb2ZmZW5zaXZlX2VwYSAlPiUgCiAgbGVmdF9qb2luKHg9LiwKICAgICAgICAgICAgeT10ZWFtX2RlZmVuc2l2ZV9lcGEsCiAgICAgICAgICAgIGJ5PSd0ZWFtJykgJT4lIAogIGxlZnRfam9pbih4PS4sCiAgICAgICAgICAgIHk9dGVhbXMsCiAgICAgICAgICAgIGJ5PWMoJ3RlYW0nID0gJ3RlYW1fYWJicicpKSkKYGBgCgoKV2hhdCdzIHRoZSBjb21iaW5lZCByZWNvcmQgb2YgdGVhbXMgaW4gZWFjaCBxdWFkcmFudD8KCmBgYHtyfQpkZl90ZWFtX2VwYSAlPiUgCiAgZ2dwbG90KC4sCiAgICAgICAgIGFlcyh4PWF2Z19vZmZlbnNpdmVfZXBhLAogICAgICAgICAgICAgeT1hdmdfZGVmZW5zaXZlX2VwYSwKICAgICAgICAgICAgIGFscGhhPWlmX2Vsc2UodGVhbSA9PSAnUElUJywgJ1BJVCcsICdPdGhlcicpKSkgKyAKICAjIGdlb21fcG9pbnQoY29sb3I9ZGZfdGVhbV9lcGEkdGVhbV9jb2xvciwgc2l6ZT0zLjUpICsgCiAgZ2VvbV9pbWFnZShhZXMoaW1hZ2UgPSB0ZWFtX2xvZ29fd2lraXBlZGlhKSwgc2l6ZT0uMSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsCiAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSAwLjgsIGxpbmV0eXBlID0gImRhc2hlZCIpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLAogICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC44LCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcyA9IGMoJ1BJVCcgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPdGhlcicgPSAuMikpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNjYWxlczo6cHJldHR5X2JyZWFrcygpLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBzY2FsZXM6OmNvbW1hX2Zvcm1hdCgpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNjYWxlczo6cHJldHR5X2JyZWFrcygpLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBzY2FsZXM6OmNvbW1hX2Zvcm1hdCgpKSArCiAgbmZsX2FuYWx5dGljc190aGVtZSgpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ25vbmUnKQpgYGAKCmBgYHtyfQooZGZfdGVhbV9lcGEgPC0gZGZfdGVhbV9lcGEgJT4lIAptdXRhdGUoZXBhX3F1YWRyYW50ID0gaWZfZWxzZShhdmdfZGVmZW5zaXZlX2VwYSA+IDAgJiBhdmdfb2ZmZW5zaXZlX2VwYSA8IDAsICdRdWFkMScsCiAgICAgICAgICAgICAgICAgICAgICBpZl9lbHNlKGF2Z19kZWZlbnNpdmVfZXBhID4gMCAmIGF2Z19vZmZlbnNpdmVfZXBhID4gMCwgJ1F1YWQyJywKICAgICAgICAgICAgICAgICAgICAgIGlmX2Vsc2UoYXZnX2RlZmVuc2l2ZV9lcGEgPCAwICYgYXZnX29mZmVuc2l2ZV9lcGEgPCAwLCAnUXVhZDMnLCAnUXVhZDQnKSkpKSkKYGBgCgpgYGB7cn0Kc2Vhc29ucyA8LSBuZmxyZWFkcjo6bG9hZF9zY2hlZHVsZXMoc2Vhc29ucyA9IDIwMjQpCmBgYAoKCmBgYHtyfQpwbGF5X2J5X3BsYXlfMjAyNCAlPiUgCiAgZmlsdGVyKGRlZnRlYW0gPT0gJ1BJVCcpICU+JSAKICBzZWxlY3QocG9zdGVhbSwgZGVmdGVhbSwgaG9tZV90ZWFtLCBjb250YWlucygnZXBhJyksIGV2ZXJ5dGhpbmcoKSkgJT4lIAogIGFycmFuZ2UoZXBhKQpgYGAKCg==